unit AdUtils;
{$i mPlatform.inc}
interface
uses
  Classes, SysUtils; 

function Min(x,y:integer):integer;
function Max(x,y:integer):integer;

function Ptr2Handle(p:pointer):longint;
function Handle2Ptr(l:longint):pointer;
function iffunc(b:boolean;athen,aelse:longint):longint;
procedure Exchange(var x,y:integer);

implementation

function iffunc(b:boolean;athen,aelse:longint):longint;
begin
  if b then Result:=athen else Result:=aelse;
end;

procedure Exchange(var x, y: integer);
var
  z: Integer;
begin
  z:=x;x:=y;y:=z;
end;

function Min(x, y: integer): integer;
begin
  if x<y then Result:=x else Result:=y;
end;

function Max(x, y: integer): integer;
begin
   if x>y then Result:=x else Result:=y;
end;

var HandleList:TList;

function Ptr2Handle(p: pointer): longint;
begin
  //Главная проблема - 64-разрядные системы. Вводить PtrInt не надо, сделаем проще
   Result:=HandleList.IndexOf(p);
   if Result=-1 then begin
     Result:=HandleList.Count;
     HandleList.Add(p);
   end;
end;

function Handle2Ptr(l: longint): pointer;
begin
  Result:=HandleList.Items[l];
end;

initialization
  HandleList:=TList.Create;
  //As 0 is a 'nil' handle, let's add it!
  HandleList.Add(nil);
finalization
  HandleList.Free;//Не надо освобождать сами указатели, с ними справятся
end.
